#ifndef _SHADOW_MESSAGE_H_
#define _SHADOW_MESSAGE_H_

#include <map>
#include <string>

using std::map;
using std::string;

#define SMSG_SEP_CHAR '&'
#define SMSG_CONN_CHAR '='
#define SMSG_ESC_CHAR '#'
#define SMSG_CARR_RET_CHAR '\r'
#define SMSG_LINE_FEED_CHAR '\n'

class SMsg {

		public:
				SMsg();
				virtual ~SMsg();
				int pack(string & str);
				int unpack(const char * buf, int len);

				int put(const string & key, const string & value);
				int put(const string & key, int value);
				int put(const string & key, long long value);

				int get_string_value(const string & key, string & value);
				int get_int_value(const string & key, int & value);
				int get_long_long_value(const string & key, long long & value);
		protected:
				int escape(const char *, int len, string & out);
		private:
				map<string, string> _contents;

};

#endif
